﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MedicalManagementSystem.Utils;

namespace MedicalManagementSystem.Models
{
    public partial class Hospital : IValidatable
    {
        public static Hospital GetByPK(int id)
        {
            return DbContext.Instance.Hospital.Where(hospital => hospital.id == id).FirstOrDefault();
        }

        public bool IsUniqueName()
        {
            return !DbContext.Instance.Hospital.Any(hospital => hospital.Name == Name);
        }

        public bool CheckBeforeSave()
        {
            return GetRuleViolations().Count() == 0;
        }

        public bool CanBeDeleted()
        {
            return DbContext.Instance.PatientChart.Where(chart => chart.Hospital.id == this.id)
                       .Count() == 0;
        }

        public IEnumerable<IRuleViolation> GetRuleViolations()
        {
            if (string.IsNullOrEmpty(Name))
            {
                yield return new RuleViolation("Название больницы не может быть пустым", this, "Name", Name);
            }
            else
            {
                if (Name != Name.Trim())
                {
                    yield return new RuleViolation("Название больницы не может начинаться/заканчиваться пробельными символами",
                        this, "Name", Name);
                    yield break;
                } 
                if (!IsUniqueName())
                {
                    yield return new RuleViolation("Больница с таким названием уже существует", this, "Name", Name);
                }
            }

            yield break;
        }
    }
}
